/**
 * 
 */
package edu.acatlan.unam.client.ui.controlador.editorTabla;

//Librerías de la clase

//Librerías del proyecto
import java.util.ArrayList;

import edu.acatlan.unam.client.ui.controlador.CBDisegnadorEditorT;
import edu.acatlan.unam.shared.bdoo.TColumna;
import edu.acatlan.unam.shared.bdoo.TTabla;

/**
 * @author jacobo
 * 
 * Esta clase es el controlador del editor de la tabla
 */
public class CEditorTabla implements ITablaColumna {
	/**
	 * Propiedades de la clase
	 */
	private CBDisegnadorEditorT cbPrincipal;
	private IEditorTabla editor;
	private TTabla tabla;
	
	/**
	 * @param c es la interfaz entre el Diseñador y el Editor de las Tablas
	 */
	public void vincular(CBDisegnadorEditorT c) {
		cbPrincipal = c;
		c.vincular(this);
	}
	
	/**
	 * @param e es la Interfaz del editor de la tabla
	 */
	public void vincular(IEditorTabla e) {
		editor = e;
	}
	
	/**
	 * @param t es la tabla que hay que mostrar en el editor
	 */
	public void mostrarTabla(TTabla t) {
		tabla = t;
		editor.mostrarTabla(t);
	}
	
	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.editorTabla.ITablaColumna#actualizarLienzo()
	 */
	public void actualizarLienzo() {
		cbPrincipal.actualizarModelo();
	}
	
	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.editorTabla.ITablaColumna#datosValidos(int, java.lang.String, java.lang.String)
	 */
	public boolean datosValidos(String c, String tipo) {
		c = c.toLowerCase();
		
		//Validar que el tipo de dato no esté vacío
		if(c.isEmpty() || tipo.isEmpty())
			return false;
		//Validamos que no haya nombres iguales
		for(int i = 0; i < tabla.getColumnas().size(); i++)
			if(tabla.getColumnas().get(i).getNombreCol().toLowerCase().compareTo(c) == 0)
				return false;
		
		return true;
	}
	
	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.editorTabla.ITablaColumna#generarColumna(int, java.lang.String, java.lang.String, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean, java.lang.String)
	 */
	public TColumna generarColumna(int indice, String nom, String tipo, Boolean pk, 
			Boolean nulo, Boolean unico, Boolean ind, String def) {
		return new TColumna(nom, tabla.getIdTabla(), tipo, pk, false, nulo, unico, ind, def, indice);
	}

	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.editorTabla.ITablaColumna#getColumnas()
	 */
	public ArrayList<TColumna> getColumnas() {
		return tabla.getColumnas();
	}

	/* (non-Javadoc)
	 * @see edu.acatlan.unam.client.ui.controlador.editorTabla.ITablaColumna#eliminarColumna(int)
	 */
	public void eliminarColumna(int indice) {
		tabla.getColumnas().remove(indice);
	}

	/**
	 * @param nTabla es el nombre de la tabla
	 */
	public void cambiarNombreTabla(String nTabla) {
		if(nTabla.isEmpty() || nTabla.contains(" ") || !cbPrincipal.nombreTablaValido(nTabla))
			editor.enfocarNombre();
		else {
			tabla.setNombreTb(nTabla);
			cbPrincipal.actualizarModelo();
			//TODO: Enviar el cambio a la base de datos
		}
	}
}
